package com.edt.ichannel.api.service;

import com.edt.ichannel.api.entiy.local.ContinueCommissionRule;
import com.edt.ichannel.api.entiy.local.EntityForSanHuResult;
import com.edt.ichannel.api.entiy.local.OrderChannel;
import com.edt.ichannel.api.entiy.local.OrderCreditBf;

import java.util.List;

public interface BFService {

    /**
     * 查询所有补发规则
     * @return 查询结果
     */
    List<ContinueCommissionRule> getAllContinueCommissionRules();

    /**
     * 根据地市 在网时长，产品编发，合伙人类型，查询需要补发的订单
     * @param cityCode 地市编码
     * @param continuitionDay 在网时长
     * @param productId 产品id
     * @param typeStr 影响的合伙人类型
     * @return 查询结果
     */
    List<OrderChannel> getNeedBFOrder(String cityCode, int continuitionDay, String productId, String typeStr);

    /**
     * 根据 业务号码查询散户信息
     * @param serviceCode 业务号码
     * @return 解析后的返回结果
     */
    EntityForSanHuResult getSanHuInfoByServiceCode(String serviceCode);

    /**
     * 根据三户查询回来的userid 查询userid是否有变化
     * @param orderCode 订单号
     * @param serviceCode 业务号码
     * @param userid 三户返回userid
     * @return true 有 即没有变化 false 没有 即有变化，已经离网
     */
    @Deprecated
    boolean hasUserId(String orderCode, String serviceCode, String userid);

    @Deprecated
    boolean validateIsOnline(String orderCode, String serviceCode);

    /**
     * 根据三户查询回来的ProductId 查询ProductId是否有变化
     * @param serviceCode 业务号码
     * @param productCode 产品编码
     * @param productid 三户返回ProductId
     * @return true 有 即没有变化 false 没有 即有变化，已经离网
     */
    @Deprecated
    boolean hasProductId(String serviceCode, String productCode, String productid);

    /**
     * 计算补发金额
     * @param orderChannel 订单
     */
    void computContinueCommission(OrderChannel orderChannel, ContinueCommissionRule continueCommissionRule);

    /**
     * 查询所有需要发放佣金的数据
     * @return 查询结果
     */
    List<OrderCreditBf> getAllNeedPutOut();

    /**
     * 发放补发佣金
     * @param orderCreditBf 需要发放佣金的数据
     */
    void putOutCommissionBf(OrderCreditBf orderCreditBf);


    /**
     * 验证是否需要结算
     * @param orderCreditBf 补发信息
     * @return 验证结果
     */
    int validateNeedComput(OrderCreditBf orderCreditBf, String developStaffId);

}
